using System.Collections.Generic;
using System.ComponentModel;
using Needle.Framework;

namespace Needle.Core.Activation {

    /// <summary>
    /// DEfines the manager for activators.
    /// </summary>
    public interface IActivationManager : IContext, IComponent, ICollection<IActivator> {
        /// <summary>
        /// Creates and configures a new instance.
        /// </summary>
        object CreateInstance(InstanceId instanceId);
        /// <summary>
        /// Configures an existing instance.
        /// </summary>
        void ConfigureInstance(InstanceId instanceId, object instance);
        /// <summary>
        /// The current activation context.
        /// </summary>
        IActivationContext CurrentContext { get; }
        /// <summary>
        /// Validates that there are no circular dependencies for the activators.
        /// </summary>
        void Validate();

    }

}
